package pers.brozen.anka.support.i18n;

import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.support.ResourceBundleMessageSource;

import java.util.List;
import java.util.Locale;

/**
 * @author Brozen
 * @since 2021-08-10
 */
public class I18nHelper {

    /**
     * 当前服务端支持的所有国际化语言
     */
    public static final List<Locale> SUPPORTED_LOCALES = List.of(
            Locale.CHINESE, Locale.ENGLISH, Locale.JAPANESE
    );

    @Setter
    private ResourceBundleMessageSource messageSource;

    public I18nHelper(ResourceBundleMessageSource messageSource) {
        this.messageSource = messageSource;
    }


    /**
     * 读取指定的message，如果不存在则返空字符串。
     * @param key message key
     * @param locale 语言环境
     * @param params message 参数
     * @return 找到的message，或者空字符串
     */
    public String msg(String key, Locale locale, Object... params) {
        return msgOrDefault(key, "", locale, params);
    }


    /**
     * 读取指定的message，如果不存在则返空null。
     * @param key message key
     * @param locale 语言环境
     * @param params message 参数
     * @return 找到的message，或者null
     */
    public String msgOrNull(String key, Locale locale, Object... params) {
        return msgOrDefault(key, null, locale, params);
    }


    /**
     * 读取指定的message，如果不存在则返回缺省值。
     * @param key message key
     * @param defaultMsg message 缺省值
     * @param locale 语言环境
     * @param params message 参数
     * @return 找到的message，或者缺省值
     */
    public String msgOrDefault(String key, String defaultMsg, Locale locale, Object... params) {
        String msg = messageSource.getMessage(key, params, defaultMsg, locale);
        return StringUtils.isBlank(msg) ? defaultMsg : msg.trim();
    }

}
